/*
 * Author : Yuval Kovler 2011
 * 
 */

package implementation.client;



import java.util.ArrayList;



public interface IUserInput {
	
	
	// maybe not all of these are necessary ?
	// all except EXIT, LOGOUT, BACK and PROFILE can be replaced by DEFAULT
	public enum EUserAction {
		EExit{ public String toString() { return "Exit"; } }, 
		EShowMainScreen{ public String toString() { return "Show Main Screen"; } },
		ELogin{ public String toString() { return "Login"; } },
		ELogout{ public String toString() { return "Logout"; } }, 
		ERegister{ public String toString() { return "Register"; } }, 
		EGetAllForums{ public String toString() { return "Show Fourms"; } },
		EGetForum{ public String toString() { return "Show Forum"; } },
		EGetPost{ public String toString() { return "Show Post"; } },
		EAddPost{ public String toString() { return "Add Post"; } },
		EEditPost{ public String toString() { return "Edit Post"; } },
		ERemovePost{ public String toString() { return "Remove Post"; } },
		EGetThread{ public String toString() { return "Show Thread"; } },
		EAddThread{ public String toString() { return "Add Thread"; } },
		ERemoveThread{ public String toString() { return "Remove Thread"; } },
		EAddFriend{ public String toString() { return "Add Friend"; } },
		ERemoveFriend{ public String toString() { return "Remove Friend"; } },
		EGetFriends{ public String toString() { return "Show Friends"; } },
		EBack{ public String toString() { return "Back"; } },
		EProfile{ public String toString() { return "Profile"; } }
	}
	
	/************************ For the use of the UI ******************************
	
	/**
	 * 
	 * @return the number of parameters that should show in the user screen to be filled in
	 */
	int paramCount();
	
	Object getParam(EUserParam param);
	
	void setParam(EUserParam param, Object value);
	
	void addParam(EUserParam param);
	
	ArrayList<EUserAction> getListOfOperations();
	

	
	/**
	 * sets the users selection action
	 */
	void setSelectedAction(EUserAction selectedAction);
	
	
	/************************ For the use of the ClientSystem ******************************
	
	
	
	/**
	 * 
	 * @return the selected action
	 */
	EUserAction getSelectedAction();
	
	
	/**
	 * adds a user operation
	 * @param operation
	 */
	void addUserOperation(EUserAction operation) ;
	
	/**
	 * removes a user operation
	 * @param operation
	 */
	void removeUserOperation(EUserAction operation) ;
	
	
}